home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / earcd / dev / misc / ros_v2_1.lha / joytest.s < prev    next >
Text File  |  1996-10-31  |  12KB  |  587 lines

  1. **
  2. **    $VER: joytest.s 1.0 (01.11.96)
  3. **
  4. **    Joyport test source
  5. **    Needs RETIRE-Operating-System Includes & Library
  6. **    ASM-One V1.09 or later required
  7. **
  8. **    RETIRE Operating System (ROS) programmed by TIK/RETIRE
  9. **    Useful ideas and hints by TODI/RETIRE
  10. **    Thanks to PABLO/RETIRE for ROS beta testing
  11. **
  12.  
  13.  
  14. *------------------------------------------------------------------------------
  15.  
  16.     INCDIR    Include:
  17.  
  18.     INCLUDE    Exec/exec_lib.i
  19. ;    INCLUDE    Exec/memory.i
  20. ;    INCLUDE    Hardware/custom.i
  21. ;    INCLUDE    Hardware/cia.i
  22.     INCLUDE    graphics/graphics_lib.i
  23.     INCLUDE    intuition/intuition_lib.i
  24.     INCLUDE    Libraries/ros.i
  25.     INCLUDE    Libraries/ros_lib.i
  26.  
  27. *------------------------------------------------------------------------------
  28.  
  29. SourceTest    = 1            ; 1=YES/0=NO
  30. ROSVersion    = 2            ; required ros.library version
  31.  
  32. *------------------------------------------------------------------------------
  33. ; CPU and chipset options, uncomment if you need it
  34.  
  35. ;_CPUType    = AFB_68020        ; Set the CPU type you need
  36. ;_ChipSetType    = ROSCSB_AGA        ; Set the chipset (ECS or AGA) you need
  37.  
  38. _CacheBits    = CACRF_EnableI!CACRF_IBE!CACRF_EnableD!CACRF_DBE!CACRF_WriteAllocate!CACRF_CopyBack
  39. _CacheMask    = CACRF_EnableI!CACRF_IBE!CACRF_EnableD!CACRF_DBE!CACRF_WriteAllocate!CACRF_CopyBack
  40.  
  41. *------------------------------------------------------------------------------
  42. ; The Player 6.1A options
  43.  
  44. ;use        = -1        ; The Usecode, uncomment to use P61A player
  45.  
  46.     IFD     use
  47. opt020        = 0        ; 0 = MC680x0 code, 1 = MC68020+ or better
  48. ;start        = 6        ; Starting position, uncomment if you need
  49. fade        = 0        ; 0 = normal, 1 = use master volume
  50. CIA        = 1        ; 0 = disabled, 1 = enabled
  51. channels    = 4        ; amount of channels to be played
  52. jump        = 1        ; 0 = do NOT include position jump code
  53.     ENDC
  54.  
  55. *------------------------------------------------------------------------------
  56.  
  57.     printt    ""
  58.     printt    "Code options used:"
  59.     printt    "------------------"
  60.  
  61.     IFD    _CPUType
  62.     IF    _CPUType=AFB_68010
  63.     printt    "CPU: 68000"
  64.     ELSE
  65.     IF    _CPUType=AFB_68020
  66.     printt    "CPU: 68020"
  67.     ELSE
  68.     IF    _CPUType=AFB_68030
  69.     printt    "CPU: 68030"
  70.     ELSE
  71.     IF    _CPUType=AFB_68040
  72.     printt    "CPU: 68040"
  73.     ELSE
  74.     IF    _CPUType=AFB_68060
  75.     printt    "CPU: 68060"
  76.     ENDC
  77.     ENDC
  78.     ENDC
  79.     ENDC
  80.     ENDC
  81.     ELSE
  82.     printt    "CPU: no check"
  83.     ENDC
  84.  
  85.     IFD    _ChipSetType
  86.     IF    _ChipSetType=ROSCSB_AGA
  87.     printt    "ChipSet: AGA"
  88.     ELSE
  89.     printt    "ChipSet: ECS"
  90.     ENDC
  91.     ELSE
  92.     printt    "ChipSet: no check"
  93.     ENDC
  94.  
  95.     printt    ""
  96.  
  97. *------------------------------------------------------------------------------
  98. ;Screen constants
  99.  
  100. ScrWidth    = 40
  101. ScrHeight    = 256
  102. Scr        = ScrWidth*ScrHeight    ; Size of the screen
  103. Bpl        = 1            ; Number of BitPlanes
  104.  
  105.  
  106. *------------------------------------------------------------------------------
  107. ; The code
  108.  
  109.     SECTION    Code,CODE
  110.  
  111.     IFEQ SourceTest
  112.     INCLUDE    misc/easystart.i    ; Then the proggy runs from Workbench
  113.     ENDC
  114.     
  115. PrgStart:
  116.     moveq    #0,d0
  117.     lea    _IntName(pc),a1
  118.     CALLEXEC OpenLibrary
  119.     move.l    d0,_IntuitionBase
  120.     beq.w    .end
  121.  
  122.     moveq    #ROSVersion,d0
  123.     lea    _ROSName(pc),a1
  124.     jsr    _LVOOpenLibrary(a6)
  125.     move.l    d0,_ROSBase
  126.     bne.b    .libok
  127.  
  128.     moveq    #0,d0
  129.     moveq    #0,d1
  130.     move.w    #20*8+52,d2        ; req width
  131.     move.w    #1*10+50,d3        ; req height
  132.     sub.l    a0,a0
  133.     sub.l    a2,a2
  134.     lea    .body(pc),a1
  135.     lea    .neggad(pc),a3
  136.     move.l    _IntuitionBase(pc),a6
  137.     jsr    _LVOAutoRequest(a6)    ; error requester
  138.     bra.w    .closeint
  139.  
  140. .neggad    dc.b    0            ; FrontPen
  141.     dc.b    1            ; BackPen
  142.     dc.b    0            ; DrawMode
  143.     dc.b    0            ; Fill
  144.     dc.w    6            ; LeftEdge
  145.     dc.w    3            ; TopEdge
  146.     dc.l    0            ; No special font
  147.     dc.l    .gadtxt            ; Pointer to text
  148.     dc.l    0            ; No more text
  149.  
  150. .body    dc.b    0            ; FrontPen
  151.     dc.b    1            ; BackPen
  152.     dc.b    0            ; DrawMode
  153.     dc.b    0            ; Fill
  154.     dc.w    16            ; LeftEdge
  155.     dc.w    10            ; TopEdge
  156.     dc.l    0            ; No special font
  157.     dc.l    .txt1            ; Pointer to text
  158.     dc.l    0            ; No more text
  159.  
  160. .gadtxt    dc.b    "Abort",0
  161. .txt1    dc.b    "Can't open ros.library V",ROSVersion+"0",0
  162.     even
  163.  
  164.  
  165. *--------------------------------------
  166. .libok
  167.  
  168.     move.l    _ROSBase(pc),a6
  169.     MOVE.L    ROS_GfxBase(a6),A6
  170.     LEA    DTxtAttr,A0        ; FontStructure-Pointer to A0
  171.     JSR    _LVOOpenFont(A6)    ; Open the font
  172.     MOVE.L    D0,A1            ; Save the Font-Pointer
  173.     MOVE.L    34(A1),DFontPtr        ; Save the RomFont-Pointer
  174.     MOVE.W    38(A1),DFontMod        ; Save The RomFont-Modulo
  175.     JSR    _LVOCloseFont(A6)    ; Close the font
  176.  
  177.     move.l    _ROSBase(pc),a6
  178.  
  179.  
  180. *--------------------------------------
  181. ; set Caches
  182.  
  183.     move.l    #AllCaches,d0        ; cachebits
  184.     move.l    #AllCaches,d1        ; cachemask
  185.     jsr    _LVOROSSetCache(a6)
  186.  
  187. *--------------------------------------
  188. ; Hardware Check
  189.  
  190.     IFD    _CPUType
  191.     move.w    #_CPUType,d0
  192.     jsr    _LVOROSCPUCheck(a6)
  193.     tst.w    d0
  194.     beq.w    .close
  195.     ENDC
  196.  
  197.     IFD    _ChipSetType
  198.     move.w    #_ChipSetType,d0
  199.     jsr    _LVOROSChipsetCheck(a6)    
  200.     tst.w    d0
  201.     beq.w    .close
  202.     ENDC
  203.  
  204.     IFD    use
  205.     jsr    _LVOROSAllocAudio(a6)
  206.     tst.w    d0
  207.     beq.w    .close
  208.     ENDC
  209.  
  210. *--------------------------------------
  211. ; Some initializings
  212.  
  213.     move.l    #Screen1,d0        ; Set plane pointers of Screen1
  214.     lea    CopBpl,a0
  215.     move.w    #Bpl-1,d1        ; # of planes
  216. .Loop1    move.w    d0,6(a0)
  217.     swap    d0
  218.     move.w    d0,2(a0)
  219.     swap    d0
  220.     addq.l    #8,a0
  221.     add.l    #Scr,d0
  222.     dbf    d1,.Loop1
  223.  
  224. *--------------------------------------
  225. ; set Playerinterrupt
  226.  
  227.     IFD    use
  228.     lea    P61_lev6server(pc),a0
  229.  
  230.     moveq    #INTB_CIABTIMA,d0
  231.     jsr    _LVOROSSetIntVec(a6)
  232.     tst.w    d0
  233.     beq.b    .timb
  234.     move.w    #INTF_CIABTIMA,d0
  235.     moveq    #0,d1            ; indicate timer a usage
  236.     bra.b    .ciaok
  237.  
  238. .timb    moveq    #INTB_CIABTIMB,d0
  239.     jsr    _LVOROSSetIntVec(a6)
  240.     tst.w    d0
  241.     beq.w    .freeaudio
  242.     move.w    #INTF_CIABTIMB,d0
  243.     moveq    #1,d1            ; indicate timer b usage
  244.  
  245. .ciaok    move.w    d0,_CiaIntFlag
  246.     move.w    d1,_CiaTimer
  247.     ENDC
  248.  
  249. *--------------------------------------
  250. ; Init-Routines
  251.  
  252. .Inits
  253.     moveq    #0,d0
  254.     moveq    #ROSJPA_ADDKEYS,d1
  255. ;    moveq    #ROSJPA_MOUSE,d1
  256.     jsr    _LVOROSSetJoyPortAttrs(a6)    
  257.     tst.w    d0
  258.     beq.b    .afterawake
  259.  
  260.     moveq    #1,d0
  261.     moveq    #ROSJPA_ADDKEYS,d1
  262. ;    moveq    #ROSJPA_JOYSTK,d1
  263. ;    moveq    #ROSJPA_GAMECTLR,d1
  264.     jsr    _LVOROSSetJoyPortAttrs(a6)    
  265.     tst.w    d0
  266.     beq.b    .afterawake
  267.  
  268.  
  269. *--------------------------------------
  270.  
  271.     lea    ExitHandler(pc),a0
  272.     jsr    _LVOROSSetExitHandler(a6)
  273.  
  274.  
  275. ;    moveq    #KILLF_DEATHMODE,d0
  276.     moveq    #KILLF_SYSMODE,d0
  277.     jsr    _LVOROSKillSystem(a6)
  278.     tst.w    d0
  279.     beq.w    .afterawake
  280.  
  281. *--------------------------------------
  282. ; PlayerInit
  283.  
  284.     IFD    use
  285.     IFD    Smpl
  286.     lea    Smpl,a1            ; Samples
  287.     ELSE
  288.     sub.l    a1,a1
  289.     ENDC
  290.  
  291.     IFD    SmpBuf
  292.     lea    SmpBuf,a2        ; Sample buffer
  293.     ENDC
  294.  
  295.     lea    Song,a0            ; Module
  296.     moveq    #0,d0            ; Auto Detect
  297.     move.w    _CiaTimer(pc),d1    ; indicate timer usage
  298.     bsr.w    P61_motuuli+P61_InitOffset
  299.     ENDC
  300.     
  301. *--------------------------------------
  302.  
  303.     jsr    _LVOROSWaitVBlank(a6)
  304.     lea    CopList1,a0
  305.     moveq    #COPF_COPPER1!COPF_STROBE,d0
  306.     jsr    _LVOROSSetCopper(a6)
  307.     move.w    #DMAF_SETCLR!DMAF_MASTER!DMAF_RASTER!DMAF_COPPER,d0
  308.     jsr    _LVOROSSetDMA(a6)
  309.  
  310.     lea    Inter(pc),a0
  311.     moveq    #INTB_VERTB,d0
  312.     jsr    _LVOROSSetIntVec(a6)
  313.  
  314.     lea    KeyHandler(pc),a0
  315.     moveq    #INTB_KEYB,d0
  316.     jsr    _LVOROSSetIntVec(a6)
  317.  
  318.     move.w    #INTF_SETCLR!INTF_INTEN!INTF_VERTB!INTF_KEYB,d0
  319.     IFD    use
  320.     or.w    _CiaIntFlag(pc),d0    ; start P61 int
  321.     ENDC
  322.     jsr    _LVOROSSetInt(a6)
  323.  
  324. *--------------------------------------
  325. ; Main-Program
  326.  
  327. .MainLoop    
  328.     jsr    _LVOROSWaitVBlank(a6)
  329.  
  330.  
  331.  
  332. .tstend    move.b    endflag(pc),d0
  333.     beq.b    .MainLoop
  334.  
  335. *--------------------------------------
  336.  
  337. .done    jsr    _LVOROSWaitVBlank(a6)
  338.     move.w    #DMAF_MASTER!DMAF_RASTER!DMAF_COPPER,d0 ; clear dma
  339.     jsr    _LVOROSSetDMA(a6)
  340.     move.w    #INTF_VERTB!INTF_KEYB,d0        ; clear int
  341.     IFD    use
  342.     or.w    _CiaIntFlag(pc),d0    ; stop P61 int
  343.     ENDC
  344.     jsr    _LVOROSSetInt(a6)
  345.  
  346.     IFD    use
  347.     bsr.w    P61_motuuli+P61_EndOffset
  348.     ENDC
  349.  
  350.     jsr    _LVOROSAwakeSystem(a6)
  351. .afterawake
  352.  
  353.  
  354. .freeaudio
  355.     IFD    use
  356.     jsr    _LVOROSFreeAudio(a6)
  357.     ENDC
  358.  
  359.  
  360. .close
  361.  
  362. .closeROS
  363.     move.l    _ROSBase(pc),a1
  364.     CALLEXEC CloseLibrary
  365.  
  366. .closeint
  367.     move.l    _IntuitionBase(pc),a1
  368.     CALLEXEC CloseLibrary
  369.  
  370. .end    moveq    #0,d0
  371.     rts
  372.  
  373. *--------------------------------------
  374.  
  375.  
  376.  
  377. _ROSBase    dc.l    0
  378. _IntuitionBase    dc.l    0
  379.  
  380.     IFD    use
  381. _CiaTimer    dc.w    0        ; P61 timer flags
  382. _CiaIntFlag    dc.w    0
  383.     ENDC
  384.  
  385. _ROSName    ROSNAME
  386. _IntName    INTNAME
  387.  
  388. endflag        dc.b    0
  389.         even
  390.  
  391. *--------------------------------------
  392.  
  393. ExitHandler:
  394.     move.b    #1,endflag
  395.     rts
  396.  
  397.  
  398. *--------------------------------------
  399.  
  400. KeyHandler:
  401.     move.l    d0,d1
  402.     LEA    Screen1,A0        ; Address for text on screen
  403.     MOVE.L    #'Key ',D0        ; 4 chars (label for each value)
  404.     BSR.W    Debug            ; Show both on screen
  405.     moveq    #0,d0
  406.     rts
  407.  
  408.  
  409. *------------------------------------------------------------------------------
  410. ; Players
  411.  
  412.     IFD    use
  413.     INCLUDE    Player/player610.2_ROS.s ; The Player 6.1a
  414.     ENDC
  415.  
  416. *------------------------------------------------------------------------------
  417.  
  418. Inter:                    ; Level 3 Interrupt-Routine
  419. ; The routines every interrupt
  420.  
  421.     moveq    #0,d0
  422.     jsr    _LVOROSReadJoyPort(a6)
  423.  
  424.     move.l    d0,d1
  425.     LEA    Screen1+10*ScrWidth,A0    ; Address for text on screen
  426.     MOVE.L    #'JP0 ',D0        ; 4 chars (label for each value)
  427.     BSR.W    Debug            ; Show both on screen
  428.  
  429.     moveq    #1,d0
  430.     jsr    _LVOROSReadJoyPort(a6)
  431.  
  432.     move.l    d0,d1
  433.     LEA    Screen1+20*ScrWidth,A0    ; Address for text on screen
  434.     MOVE.L    #'JP1 ',D0        ; 4 chars (label for each value)
  435.     BSR.W    Debug            ; Show both on screen
  436.  
  437.     rts
  438.  
  439. *------------------------------------------------------------------------------
  440.  
  441.  
  442.  
  443. ; Show 4 chars and a 32 bit value on screen (for debugging)
  444. ; -> A0-Address for text, D0-Display as 4 chars, D1-Display as 8 Hex-Values
  445. ; Uses A0-A2/D0-D4/D6/D7
  446.  
  447. Debug:
  448.     MOVE.L    DFontPtr,A1        ; Address of RomFont
  449.     MOVEQ    #0,D4
  450.  
  451.     MOVEQ    #4-1,D6            ; # of chars
  452. .Char:    MOVEQ    #0,D2            ; ScrWidht
  453.     MOVEQ    #0,D3            ; FontMod
  454.  
  455.     ROL.L    #8,D0            ; Get first char in Low-Byte
  456.     MOVE.B    D0,D4            ; Get char in D3
  457.     SUB.B    #32,D4            ; Get position on font
  458.     LEA    (A1,D4.W),A2        ; Get address of char
  459.  
  460.     MOVEQ    #8-1,D7            ; # of Char-Bytes
  461. .Move1:    MOVE.B    (A2,D3.W),(A0,D2.W)
  462.     ADD.W    #ScrWidth,D2        ; Next line on screen
  463.     ADD.W    DFontMod,D3        ; Next byte of char
  464.     DBF    D7,.Move1
  465.  
  466.     ADDQ.L    #1,A0            ; Next position on screen
  467.     DBF    D6,.Char
  468.  
  469.  
  470.     MOVEQ    #8-1,D6            ; # of values
  471. .Value:    MOVEQ    #0,D2            ; ScrWidht
  472.     MOVEQ    #0,D3            ; FontMod
  473.  
  474.     ROL.L    #4,D1            ; Get first value (4 bit) in Low-Byte
  475.     MOVE.B    D1,D4            ; But get 8 bits
  476.     AND.W    #$000F,D4        ; Mask out unwanted bits
  477.     CMP.W    #9,D4
  478.     BHI.S    .Hex            ; Use A to F for Hex-Values, jump
  479.     ADD.B    #16,D4            ; Get position in font (Value<A, hex)
  480.     BRA.S    .Move
  481. .Hex:    ADD.B    #23,D4            ; Get position in font (Value>9)
  482. .Move:    LEA    (A1,D4.W),A2        ; Get address of char
  483.  
  484.     MOVEQ    #8-1,D7            ; # of Char-Bytes
  485. .Move2:    MOVE.B    (A2,D3.W),(A0,D2.W)
  486.     ADD.W    #ScrWidth,D2        ; Next line on screen
  487.     ADD.W    DFontMod,D3        ; Next byte of char
  488.     DBF    D7,.Move2
  489.  
  490.     ADDQ.L    #1,A0            ; Next position on screen
  491.     DBF    D6,.Value
  492.     RTS
  493.  
  494.  
  495. DFontPtr    DC.L    0
  496. DFontMod    DC.W    0
  497. DTxtAttr    DC.L    DFntName
  498.         DC.W    8
  499.         DC.B    0
  500.         DC.B    0
  501. DFntName    DC.B    'topaz.font',0
  502.  
  503.  
  504.  
  505.  
  506.  
  507. *------------------------------------------------------------------------------
  508. ; Copper area
  509.  
  510.     SECTION    Copper1,DATA_C
  511.  
  512. CopList1:
  513. CopBpl    dc.w    $00e0,0000        ; bpl-pointers
  514.     dc.w    $00e2,0000
  515.     dc.w    $00e4,0000
  516.     dc.w    $00e6,0000
  517.     dc.w    $00e8,0000
  518.     dc.w    $00ea,0000
  519.     dc.w    $00ec,0000
  520.     dc.w    $00ee,0000
  521.     dc.w    $00f0,0000
  522.     dc.w    $00f2,0000
  523.     dc.w    $00f4,0000
  524.     dc.w    $00f6,0000
  525.     dc.w    $00f8,0000
  526.     dc.w    $00fa,0000
  527.     dc.w    $00fc,0000
  528.     dc.w    $00fe,0000
  529.     dc.w    $0100,Bpl<<12!$200    ; bit-plane control reg.
  530.     dc.w    $0102,$0000        ; hor-scroll
  531.     dc.w    $0104,$0010        ; sprite/gfx priority
  532.     dc.w    $01fc,$0000        ; fetch mode
  533.     dc.w    $0108,$0000        ; modolu (odd)
  534.     dc.w    $010a,$0000        ; modolu (even)
  535.     dc.w    $008e,$2c81        ; screen size
  536.     dc.w    $0090,$2cc1        ; screen size
  537.     dc.w    $0092,$0038        ; h-start
  538.     dc.w    $0094,$00d0        ; h-stop
  539. ; end of initializing, and now the user-copper-data
  540.     dc.w    $0180,$0000
  541.     dc.w    $0182,$0eee
  542.     dc.l    $fffffffe        ; end of copperlist
  543.  
  544.  
  545. *------------------------------------------------------------------------------
  546. ; Screen area
  547.  
  548.     SECTION    Screen1,BSS_C
  549.  
  550. Screen1    DS.B    Scr*Bpl            ; Area for Screen1
  551.  
  552.  
  553. *------------------------------------------------------------------------------
  554. ; Music area
  555.  
  556.     IFD    use
  557.  
  558.     SECTION    Music1,DATA_C    ; Chipmem for entire module or for samples
  559.                 ; Uncomment if you use separate samples
  560. ;Smpl    INCBIN    st-00:modules/p61a/smp.art
  561.  
  562.  
  563.     IFD    Smpl
  564.     SECTION    Music2,DATA    ; If separate samples, we use fast mem for song
  565.     ENDC
  566. Song    INCBIN    st-00:modules/p61a/p61.art
  567.  
  568.  
  569.     SECTION    Music3,BSS_C
  570. ;SmpBuf    DS.B    120000        ; Uncomment if you have packed samples
  571.                 ; and insert sample buffer length
  572.     ENDC
  573.  
  574. *------------------------------------------------------------------------------
  575.  
  576.     IFEQ SourceTest
  577.     printt    ""
  578.     printt    ""
  579.     printt    "Attention Workbench-Startup enabled"
  580.     printt    ""
  581.     AUTO    WO\
  582.     ENDC
  583.  
  584. *------------------------------------------------------------------------------
  585. End:                    ; The end of all shit
  586.  
  587.